package leetcode007;

/**
 *  整数反转
 *  https://leetcode.cn/problems/reverse-integer/description/
 *  给你一个 32 位的有符号整数 x ，返回将 x 中的数字部分反转后的结果。
 *
 * 如果反转后整数超过 32 位的有符号整数的范围 [−231,  231 − 1] ，就返回 0。
 *
 * 假设环境不允许存储 64 位整数（有符号或无符号）。
 */
public class Study007 {

    public int reverse(int x) {
        int symbol = x >= 0? 1: -1;
        int result = 0;
        while (x != 0) {
            int temp = Math.abs(x % 10);
            if (symbol > 0) {
                if (result > Integer.MAX_VALUE / 10){
                    return 0;
                } else if (result == Integer.MAX_VALUE / 10 && temp >= Integer.MAX_VALUE % 10){
                    return 0;
                }
            } else {
                if (-result < Integer.MIN_VALUE / 10){
                    return 0;
                } else if (-result == Integer.MIN_VALUE / 10 && temp >= Math.abs(Integer.MIN_VALUE % 10)){
                    return 0;
                }
            }
            result = result * 10 + temp;
            x = x/10;
        }
        return result * symbol;
    }

    public static void main(String[] args) {
        Study007 study007 = new Study007();
        System.out.println(study007.reverse(-1463847412));
    }
}
